Skip to content

ErdosProblems: add 71, 206, 209, 328, 353, 403, 426, 464, 512, 621, 639, 648 (#3998 sync)#4385

Open
williamjblair wants to merge 5 commits into
google-deepmind:mainfrom
williamjblair:erdos-campaign-batch-5
Open

ErdosProblems: add 71, 206, 209, 328, 353, 403, 426, 464, 512, 621, 639, 648 (#3998 sync)#4385
williamjblair wants to merge 5 commits into
google-deepmind:mainfrom
williamjblair:erdos-campaign-batch-5

Conversation

@williamjblair

@williamjblair williamjblair commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Adds Formal Conjectures statements for Erdős problems 71, 206, 209, 328, 353, 403, 426, 464, 512, 621, 639, 648.

Each statement was drafted from the boxed problem text on erdosproblems.com (docstrings verbatim), cross-checked against hosted Lean statements/proofs where available, and reviewed for statement fidelity before submission. No formal_proof annotation is included in this batch; 648 has a nearby hosted proof, but this PR follows the problem-text range rather than the hosted range. Divergences from the hosted formalizations are noted below.

problem upstream state proof linked divergence notes
71 proved (Lean) no (statement only) vs jayyhk: AP encoded with the house predicate Set.IsAPOfLength (⊤ : ℕ∞) on Set ℕ instead of a bespoke InfiniteAP structure; infinite cardinality forces d ≥ 1, so no explicit d_pos field is needed.; …
206 disproved (Lean) no (statement only) vs plby + jayyhk (identical defs in both hosted excerpts): egyptianSum, ValidEgyptian, IsUnderapprox, IsBestNTerm, EventuallyGreedy adopted verbatim; …
209 disproved (Lean) no (statement only) jayyhk states the bare negation ¬ ∀ d, ...; we use the FC house form for disproved yes/no problems, answer(False) ↔ ∀ d, ... (logically equivalent, matches e.g. FC 1128).; …
328 disproved (Lean) no (statement only) Polarity/wrapper: stated as answer(False) ↔ P where P = (∀ C > 0, ∃ t, ∀ A with 1_A∗1_A ≤ C, ∃ partition into t parts each with 1_{A_i}∗1_{A_i} < C) — FC house style for a disproved yes/no question (cf. FC 871, batch-3 333); …
353 proved (Lean) no (statement only) Structure: hosted (jayyhk) packs all five sub-questions into one conjunction theorem erdos_353; draft follows FC house style with headline erdos_353 = the leading isosceles-trapezoid question as answer(True) <-> ..., plus four variants …
403 proved (Lean) no (statement only) jayyhk erdos403_complete/erdos_403 state a complete classification (IsErdos403Solution m s iff the explicit five-solution disjunction); …
426 disproved (Lean) no (statement only) STATEMENT DIRECTION: the drafted theorem states the QUESTION positively as answer(False) <-> P (upstream state 'disproved (Lean)' maps to FC category 'research solved' with answer False, per the batch-3 429 precedent); …
464 proved (Lean) no (statement only) vs problem text: the literal conclusion ('{
512 proved (Lean) no (statement only) jayyhk hosts the statement on AddCircle (1 : ℝ) with haarAddCircle and the fourier monomials; we integrate over θ ∈ [0,1] with intervalIntegral, following the problem text's ∫_0^1 literally.; …
621 proved (Lean) no (statement only) vs plby (P4_le_D, P4_add_C4_le_K13): hosted proof works in a bespoke Trigraph reformulation and proves inequalities between abstract quantities (P4, C4, D, K13) with no n^2/4 normalization and no alpha_1/tau_1 extremal values; …
639 proved (Lean) no (statement only) Large-n hypothesis: both hosted theorems (plby, jayyhk) witness 'large n' with an explicit 10 <= Fintype.card V; the draft instead uses the asymptotic form forall-eventually n in atTop (FC house style for 'sufficiently large', cf; …
648 solved (Lean) no (nearby proof only) range: the draft follows the problem text, 2 <= a_1 < ... < a_t < n (Set.Ico 2 n); both hosted theorems (plby, jayyhk) constrain sequence members to Set.Ioc 0 n, admitting 1 and n and dropping the lower bound 2; …

For 621, see also #835.

Part of #3998.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

👋 This is an automated welcome message. 🤖
Thanks for the contributions!

A few friendly reminders while the review gets started:

  • Please take a look at the style guidelines,
    especially the conventions for references, categories, AMS tags, and answer(sorry).
  • You can manage some PR labels by leaving a comment with +label-name or -label-name; for example, +awaiting-author or -awaiting-author.
  • This repository is mainly for formalised statements. Proofs longer than about 25-50 lines are usually out of scope; longer proofs are welcome to be included/linked via the formal_proof mechanism.

Thanks again for helping improve Formal Conjectures.

@github-actions github-actions Bot added the erdos-problems Erdős Problems label Jul 3, 2026

@mo271 mo271 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, just a few nits about moving stuff to FormalConjecturesForMathlib/re-using stuff from there...

Comment on lines +59 to +61
/-- All elements of the finset are positive (valid denominators). -/
def ValidEgyptian (S : Finset ℕ) : Prop :=
∀ m ∈ S, 0 < m

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

potentially inline? It is only used once


/-- The Egyptian fraction sum: `∑_{m ∈ S} 1/m` for a finset of natural numbers. -/
noncomputable def egyptianSum (S : Finset ℕ) : ℝ :=
S.sum (fun m => (1 : ℝ) / m)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
S.sum (fun m => (1 : ℝ) / m)
∑ m ∈ S, (1 : ℝ) / m

better equivalent notation?

I feel like this should probably go into ForMathlib somewhere: isn't this uesd also in other problems?

Comment on lines +38 to +39
def IsLine (L : AffineSubspace ℝ ℝ²) : Prop :=
∃ p q : ℝ², p ≠ q ∧ L = affineSpan ℝ {p, q}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def IsLine (L : AffineSubspace ℝ ℝ²) : Prop :=
∃ p q : ℝ², p ≠ q ∧ L = affineSpan ℝ {p, q}
def IsLine (L : AffineSubspace ℝ ℝ²) : Prop :=
finrank ℝ L.direction = 1

Would this be more mathlib idiomatic (untested).
Perhaps also good to either inline or move to ForMathlib?

theorem erdos_353.variants.isosceles_triangle :
∀ A : Set ℝ², MeasurableSet A → volume A = ⊤ →
∃ a ∈ A, ∃ b ∈ A, ∃ c ∈ A,
(dist a b = dist a c ∨ dist b a = dist b c ∨ dist c a = dist c b) ∧

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

re-use IsIsosceles from FormalConjecturesForMathlib/Geometry/2d.lean?
instead of inlining it here?

theorem erdos_353.variants.right_angled_triangle :
∀ A : Set ℝ², MeasurableSet A → volume A = ⊤ →
∃ a ∈ A, ∃ b ∈ A, ∃ c ∈ A,
(∠ b a c = π / 2 ∨ ∠ a b c = π / 2 ∨ ∠ b c a = π / 2) ∧

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be factored out into a clean IsRightAngled definition in FormalConjecturesForMathlib/Geometry/2d.lean, if not there already

parallel sides together with equal diagonals is the classical characterization of
an isosceles trapezoid; in particular it rules out non-rectangular parallelograms.
-/
def IsIsoscelesTrapezoid (a b c d : ℝ²) : Prop :=

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

belongs in FormalConjecturesForMathlib/Geometry/2d.lean as part of the standard 2D geometry API, where IsCcwConvexPolygon is also defined.

Comment on lines +40 to +55
/--
`G` is a **unique subgraph** of `H` if there is exactly one subgraph of `H` isomorphic to `G`.
Subgraphs of `H` are taken in the spanning sense: elements `G' ≤ H` of the lattice
`SimpleGraph (Fin n)`, i.e. subsets of the edges of `H` (not necessarily induced).
-/
def IsUniqueSubgraph {n : ℕ} (G H : SimpleGraph (Fin n)) : Prop :=
∃! G' : SimpleGraph (Fin n), G' ≤ H ∧ Nonempty (G.Iso G')

/--
The number of distinct unique subgraphs of `H`: the number of isomorphism classes of graphs
that occur exactly once as a subgraph of `H`. Each such class contains exactly one subgraph
`G ≤ H` (uniqueness forbids a second isomorphic copy), so counting those representatives
counts the classes.
-/
noncomputable def uniqueSubgraphCount {n : ℕ} (H : SimpleGraph (Fin n)) : ℕ :=
{G : SimpleGraph (Fin n) | G ≤ H ∧ IsUniqueSubgraph G H}.ncard

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably best to create FormalConjecturesForMathlib/Combinatorics/SimpleGraph/SubgraphIsomorphism.lean. Move IsUniqueSubgraph and uniqueSubgraphCount there. Add @[category test] sanity checks.

Comment on lines +34 to +35
/-- Shorthand for the additive character $e(x) = e^{2\pi i x}$. -/
noncomputable def e (x : ℝ) : ℂ := Complex.exp ((2 * Real.pi * x : ℝ) * Complex.I)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This exact definition is duplicated across 512.lean, 987.lean, and appears in SpectralSets.lean as exponentialCharacter. While 987.lean notes it is kept local for readability, having def e copy-pasted in every analytic number theory seems silly. Consider moving def e into a suitable shared file in FormalConjecturesForMathlib.

@mo271 mo271 added the awaiting-author The author should answer a question or perform changes. Reply when done. label Jul 5, 2026
- 353: move IsIsoscelesTrapezoid into FormalConjecturesForMathlib/Geometry/2d.lean;
  reuse the existing IsIsosceles; add IsRightAngled there and use it
- 206: use big-operator notation for egyptianSum; inline the single-use ValidEgyptian
- 209: define IsLine via finrank of the direction (mo271's suggestion)
- 426: move IsUniqueSubgraph and uniqueSubgraphCount into a new
  FormalConjecturesForMathlib/Combinatorics/SimpleGraph/SubgraphIsomorphism.lean
  (generalized to any vertex type); add a @[category test] sanity check
- 512: extract the additive character e(x)=e^{2πix} into a shared
  FormalConjecturesForMathlib/Analysis/SpecialFunctions/AdditiveCharacter.lean;
  512 and 987 now reuse it instead of copy-pasting the definition
@williamjblair

Copy link
Copy Markdown
Contributor Author

Thanks, should be all applied

  • 353: moved IsIsoscelesTrapezoid into Geometry/2d.lean, reused the existing IsIsosceles, and added IsRightAngled there.
  • 209: IsLine is now finrank ℝ L.direction = 1.
  • 206: notation for egyptianSum, and inlined the single-use ValidEgyptian. egyptianSum is used only here, so I left it local rather than moving it.
  • 426: added FormalConjecturesForMathlib/Combinatorics/SimpleGraph/SubgraphIsomorphism.lean with IsUniqueSubgraph and uniqueSubgraphCount (generalized to any vertex type), plus a @[category test] sanity check.
  • 512: extracted the shared additive character e into FormalConjecturesForMathlib/Analysis/SpecialFunctions/AdditiveCharacter.lean; 512 and 987 now reuse it. I can drop the 987 change if you'd rather keep this PR to the listed files.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-author The author should answer a question or perform changes. Reply when done. erdos-problems Erdős Problems

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants